{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "%load_ext autoreload\n",
    "%autoreload 2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from math import ceil\n",
    "import torch\n",
    "from torch.utils.data import DataLoader\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "\n",
    "import sys\n",
    "sys.path.append('..')\n",
    "from utils.input_pipeline import get_image_folders\n",
    "from utils.training import train, optimization_step\n",
    "from utils.diagnostic import count_params\n",
    "    \n",
    "torch.cuda.is_available()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "torch.backends.cudnn.benchmark = True"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Create data iterators"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "batch_size = 128"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "100000"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_folder, val_folder = get_image_folders()\n",
    "\n",
    "train_iterator = DataLoader(\n",
    "    train_folder, batch_size=batch_size, num_workers=4,\n",
    "    shuffle=True, pin_memory=True\n",
    ")\n",
    "\n",
    "val_iterator = DataLoader(\n",
    "    val_folder, batch_size=256, num_workers=4,\n",
    "    shuffle=False, pin_memory=True\n",
    ")\n",
    "\n",
    "# number of training samples\n",
    "train_size = len(train_folder.imgs)\n",
    "train_size"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "10000"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# number of validation samples\n",
    "val_size = len(val_folder.imgs)\n",
    "val_size"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from get_squeezenet import get_model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": true,
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "model, loss, optimizer = get_model()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "827784"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# number of params in the model\n",
    "count_params(model)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Train"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "782"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from torch.optim.lr_scheduler import ReduceLROnPlateau\n",
    "\n",
    "n_epochs = 200\n",
    "n_batches = ceil(train_size/batch_size)\n",
    "\n",
    "lr_scheduler = ReduceLROnPlateau(\n",
    "    optimizer, mode='max', factor=0.1, patience=4, \n",
    "    verbose=True, threshold=0.01, threshold_mode='abs'\n",
    ")\n",
    "\n",
    "# total number of batches in the train set\n",
    "n_batches"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0  4.768 4.074  0.053 0.118  0.165 0.327  115.271\n",
      "1  3.948 3.709  0.145 0.175  0.363 0.419  113.210\n",
      "2  3.634 3.363  0.193 0.228  0.437 0.498  113.220\n",
      "3  3.436 3.255  0.227 0.253  0.485 0.520  113.171\n",
      "4  3.294 3.139  0.252 0.275  0.515 0.552  113.301\n",
      "5  3.193 3.086  0.268 0.284  0.538 0.565  113.149\n",
      "6  3.089 2.988  0.288 0.305  0.562 0.583  113.123\n",
      "7  3.025 2.940  0.300 0.312  0.576 0.597  113.105\n",
      "8  2.952 2.947  0.314 0.315  0.590 0.597  113.212\n",
      "9  2.903 2.900  0.324 0.329  0.601 0.602  113.163\n",
      "10  2.862 2.767  0.332 0.349  0.610 0.624  113.071\n",
      "11  2.822 2.732  0.340 0.357  0.616 0.639  113.108\n",
      "12  2.782 2.738  0.346 0.352  0.626 0.634  113.138\n",
      "13  2.754 2.819  0.351 0.341  0.632 0.620  113.156\n",
      "14  2.734 2.681  0.355 0.363  0.636 0.646  113.206\n",
      "15  2.709 2.693  0.362 0.363  0.642 0.642  113.168\n",
      "16  2.690 2.761  0.364 0.352  0.644 0.627  113.054\n",
      "17  2.673 2.637  0.365 0.379  0.648 0.655  112.994\n",
      "18  2.653 2.666  0.373 0.368  0.650 0.653  113.018\n",
      "19  2.635 2.696  0.376 0.359  0.654 0.648  113.105\n",
      "20  2.628 2.585  0.377 0.388  0.655 0.664  113.004\n",
      "21  2.620 2.640  0.379 0.374  0.658 0.654  113.123\n",
      "22  2.602 2.596  0.383 0.386  0.661 0.660  113.102\n",
      "Epoch    22: reducing learning rate of group 0 to 4.0000e-03.\n",
      "Epoch    22: reducing learning rate of group 1 to 4.0000e-03.\n",
      "Epoch    22: reducing learning rate of group 2 to 4.0000e-03.\n",
      "Epoch    22: reducing learning rate of group 3 to 4.0000e-03.\n",
      "23  2.202 2.154  0.469 0.475  0.732 0.743  113.071\n",
      "24  2.074 2.116  0.493 0.485  0.753 0.749  113.004\n",
      "25  2.024 2.116  0.503 0.486  0.760 0.754  113.051\n",
      "26  1.995 2.082  0.509 0.496  0.767 0.755  112.939\n",
      "27  1.962 2.079  0.516 0.495  0.773 0.757  113.034\n",
      "28  1.944 2.073  0.519 0.497  0.776 0.758  113.073\n",
      "29  1.930 2.084  0.521 0.495  0.778 0.755  113.067\n",
      "30  1.910 2.051  0.526 0.498  0.781 0.764  113.023\n",
      "31  1.896 2.056  0.529 0.500  0.784 0.760  112.984\n",
      "32  1.891 2.073  0.528 0.499  0.784 0.757  113.065\n",
      "33  1.876 2.082  0.534 0.499  0.787 0.759  112.994\n",
      "Epoch    33: reducing learning rate of group 0 to 4.0000e-04.\n",
      "Epoch    33: reducing learning rate of group 1 to 4.0000e-04.\n",
      "Epoch    33: reducing learning rate of group 2 to 4.0000e-04.\n",
      "Epoch    33: reducing learning rate of group 3 to 4.0000e-04.\n",
      "34  1.775 1.978  0.556 0.517  0.803 0.771  112.831\n",
      "35  1.746 1.980  0.563 0.521  0.807 0.773  112.862\n",
      "36  1.731 1.977  0.567 0.520  0.810 0.771  113.006\n",
      "37  1.727 1.970  0.566 0.524  0.811 0.773  113.034\n",
      "38  1.722 1.979  0.567 0.525  0.811 0.774  113.045\n",
      "39  1.721 1.975  0.568 0.523  0.811 0.773  113.064\n",
      "Epoch    39: reducing learning rate of group 0 to 4.0000e-05.\n",
      "Epoch    39: reducing learning rate of group 1 to 4.0000e-05.\n",
      "Epoch    39: reducing learning rate of group 2 to 4.0000e-05.\n",
      "Epoch    39: reducing learning rate of group 3 to 4.0000e-05.\n",
      "40  1.707 1.968  0.571 0.526  0.814 0.774  113.096\n",
      "41  1.700 1.967  0.572 0.525  0.816 0.774  112.965\n",
      "42  1.704 1.972  0.571 0.525  0.815 0.774  113.022\n",
      "43  1.704 1.971  0.572 0.524  0.813 0.775  112.907\n",
      "44  1.697 1.968  0.575 0.524  0.816 0.774  112.902\n",
      "early stopping!\n",
      "CPU times: user 1h 12min 2s, sys: 13min 11s, total: 1h 25min 14s\n",
      "Wall time: 1h 24min 50s\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "def optimization_step_fn(model, loss, x_batch, y_batch):\n",
    "    return optimization_step(model, loss, x_batch, y_batch, optimizer)\n",
    "\n",
    "all_losses = train(\n",
    "    model, loss, optimization_step_fn,\n",
    "    train_iterator, val_iterator, n_epochs,\n",
    "    patience=8, threshold=0.01,  # for early stopping\n",
    "    lr_scheduler=lr_scheduler\n",
    ")\n",
    "# epoch logloss  accuracy    top5_accuracy time  (first value: train, second value: val)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Loss/epoch plots"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f932d7976a0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "epochs = [x[0] for x in all_losses]\n",
    "plt.plot(epochs, [x[1] for x in all_losses], label='train');\n",
    "plt.plot(epochs, [x[2] for x in all_losses], label='val');\n",
    "plt.legend();\n",
    "plt.xlabel('epoch');\n",
    "plt.ylabel('loss');"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f932d797710>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(epochs, [x[3] for x in all_losses], label='train');\n",
    "plt.plot(epochs, [x[4] for x in all_losses], label='val');\n",
    "plt.legend();\n",
    "plt.xlabel('epoch');\n",
    "plt.ylabel('accuracy');"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYYAAAEKCAYAAAAW8vJGAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XmcVNW16PHfqurqeZ4YuplpZRAEQcQZp4gahwwKXuPN\nYCQaTTR5NzcmMTFmNC/vxuiNxqAxaoKiiRPX4EU0gqKizMo8Q0/QAz3PXbXeH6cauroLKLCrq7tr\nfT+f+pxp1+lVR6lVZ++z9xZVxRhjjOnginQAxhhj+hZLDMYYYwJYYjDGGBPAEoMxxpgAlhiMMcYE\nsMRgjDEmgCUGY4wxASwxGGOMCWCJwRhjTICYSAdwMrKzs3XkyJGRDsMYY/qVNWvWVKhqzvHK9cvE\nMHLkSFavXh3pMIwxpl8RkX2hlLOqJGOMMQEsMRhjjAlgicEYY0yAftnGEExbWxtFRUU0NzdHOpSw\nio+PJz8/H4/HE+lQjDED1IBJDEVFRaSkpDBy5EhEJNLhhIWqUllZSVFREaNGjYp0OMaYAWrAVCU1\nNzeTlZU1YJMCgIiQlZU14O+KjDGRNWASAzCgk0KHaPiMxpjIGjBVScYY09t8PqW2uY2apjaqG/3L\nJmdZ09iKKiTEuon3uEnwuEmIdZbxHjdpCR5yUuLITIrF7Qr+g09VqWpso6iqkaKqJgoPNXL2mCwm\n56eH9XNZYugh1dXVPPvss3zzm988ofddeeWVPPvss6Snh/c/tDHm5NU0trGrop495Q3sqXBeu8rr\n2VvZQHOb71Od2yWQmRRHTorzyk6KpaapjaKqJoqqGmlo9QaU/+GV4/p/YhCR2cBDgBt4QlUf6HI8\nDfgbMNwfz/9T1b+EO66eVl1dzaOPPtotMbS3txMTc/TLvHjx4nCHZsyAVN/STnFVE8XVzq/p4qom\niqqbKK9rod3rw6vg9fnw+jqWik/xLxVfx7YqqorXpwFlvP4yzvEjf9ftEoZnJjIqO4lzx2YzND2B\n9AQPaQke0hOdZZp/6RKhuc1LU5uX5lYfTf71xtZ2ahrbKK9vobyuhQr/sryuhV1l9aTExzAsM5Fz\nxmaRn5FIfkYCwzISyctIIC0h/E8khjUxiIgbeAS4DCgCVonIIlXd3KnYHcBmVb1aRHKAbSKyQFVb\nwxlbT7vnnnvYtWsXU6ZMwePxEB8fT0ZGBlu3bmX79u1cd911FBYW0tzczF133cW8efOAI8N71NfX\nc8UVV3Deeefx/vvvk5eXx6uvvkpCQkKEP5kxkdXY2s72g/VsKa1la2ktW0rr2F5WR3VjW0C5WLeL\noenx5KbGkxgbg9slR14iuN2CSwS3gMvVsS64XOAS/3bHfpdTxu3flxIfw+jsZEblJDEsI5HYmNCb\nZz1uFynx/evx8nDfMcwAdqrqbgARWQhcC3RODAqkiNOqmgwcAto/zR+9/382sbmk9tOcopsJQ1O5\n7+qJRz3+wAMPsHHjRtavX8+yZcu46qqr2Lhx4+HHSp988kkyMzNpamrizDPP5Atf+AJZWVkB59ix\nYwfPPfccjz/+ODfccAMvvvgiX/rSl3r0cxjTH+ypaODBpdv5pLiGvZUNh3+xJ8W6GTcklStOG8Lw\nTOcXdF56AsMyEshOjsN1lLp6c2LCnRjygMJO20XAWV3K/AFYBJQAKcAcVf10lXZ9wIwZMwL6Gjz8\n8MO8/PLLABQWFrJjx45uiWHUqFFMmTIFgGnTprF3795ei9eYvuLldUXc+/JGXC7h3DHZXDtlKOOH\npDJ+cCr5GQn25d8L+kLj8+XAeuBiYAywVETeVdWAn/wiMg+YBzB8+PBjnvBYv+x7S1JS0uH1ZcuW\n8eabb/LBBx+QmJjIrFmzgvZFiIuLO7zudrtpamrqlViN6QsaWtr5yaubeHFtEWeOzOChuVMZmm5V\nqZEQ7n4MxcCwTtv5/n2dfRV4SR07gT3AuK4nUtX5qjpdVafn5Bx3OPFel5KSQl1dXdBjNTU1ZGRk\nkJiYyNatW1m5cmUvR2dM37a5pJar/7CCl9YV8e2Lx/LcrTMtKURQuO8YVgEFIjIKJyHMBf6tS5n9\nwCXAuyIyCDgV2B3muHpcVlYW5557LqeddhoJCQkMGjTo8LHZs2fz2GOPMX78eE499VRmzpwZwUiN\n6TtUlb+t3MfP/7mFtAQPC245i3PGZkc6rKgn2vk5rHD8AZErgd/jPK76pKr+UkRuA1DVx0RkKPAU\nMAQQ4AFV/duxzjl9+nTtOlHPli1bGD9+fBg+Qd8TTZ/VDBzNbV4O1jZzoKaZA7XNHKxtZuXuQ/xr\naxkXnpLDf91wOtnJccc/kTlpIrJGVacfr1zY2xhUdTGwuMu+xzqtlwCfCXccxpie4fMpB+ua2V/Z\nyL5DjeyvbKSwqpGGlnZavUq710eb13d4vbXdR0V9C1VdHi8FSImP4QdXjOPW80dbo3If0hcan40x\nfURTq5cDtc2HO1uV1zVT5l8vq2uhqKqRwqomWtuPPDjodglD0uJJjffgiXHhcQket4uE2CPrM0Zl\nMjg1nsFp/ldqPIPS4kmJi7Hxv/ogSwzGRJGO3sIdY+8UV3dar2qisqF7v9IYl5Cd7AzXUJCbwiXj\nBzE8M5ERWYkMz0xkaHoCHveAGo8z6lliMGaAafP6WF9YzabiGv94O00U+YeN6NZbOMZFvr+T2MSh\naeRnJDA4NZ7cVCcR5KbEk57giWw1j88LTVXQUA71Zc6yuQYS0iExG5JyICkbEjLBHRP4vuYa571N\n1c6yudrZ11IHLbXQXOssW+rA2wqeRIhNOrLsWBdxyhwu3/HeOvC2gcsF4gZXDLjc/nX/S1z+V8e6\nOPu9bdDaAG1N/lfjkZcrBmISwBPfaRkPngSY9hUYd1VYL7klBmP6OVVlT0UD7+6o4N0dFazcXUl9\nizN4QLzHdXisndPz0w+v52UkkJ+RQHZSH+wt7G2D9Qtg9V+gtgQaKyCkPq8CCRkQl+x8aTfX4Ays\ncLTibohPhbgUiEsDtwfaiqC1EdoanC/t9s79jcRf1v+e+FRIzAR3rJOE1Ossfe1OvO3NzlJ9/uM+\nUHXKqc/5e55EiE10Epsnwdn2JDjl25udhNF5WV/mxBdmlhiM6YeqGlp5b1cFK/zJoLja6Qw5PDOR\na6cM5fyCbM4YkUFOclz/qcP3tsPHz8Py30D1PhhyOoy70n9HkOt8eSbnOttxqc6v/4YK5w6isfLI\nems9xKc5SaLrKz79SDLouBM4Fp/X+QWvCrHJzp1BFLDEECHJycnU19dHOgzTTzS3eVmzr4p3d1Tw\n3s4KNpbUoOo81XPumGxunzWG8wuyGZGVdPyTnSifD/Z/ABtfdLZzx/tfE5xfzJ/6/F7n3MsegEO7\nnIRw5W+h4DPH/uJOHfLp//bxuNxOEokylhiM6aOKq5t4Y9MB/rW1jFV7D9Hc5iPGJZwxPIPvXHoK\n5xVkMzkvjZhwNfxW7oINC+HjhVC9HzxJTh1+c82RMsmDIGeckyQyR0HaMEjLd14JGcG/2Ntb/L/u\ny6BsK6x4ECq2waDTYM4Cp/68v9zlDFCWGHrIPffcw7Bhw7jjjjsA+OlPf0pMTAxvv/02VVVVtLW1\n8Ytf/IJrr702wpGavkpV2X6wniWbDvDG5gNsLHaGCxuTk8TcM4dzfkE2Z43OIjkuxqnaaK6B2v1H\nGkEDGlP9dexN/sbW5mr/un/pjj3yBZ4+3L8+DFKHQukG2PAcFH4ICIyeBRf/2PnC9iRCXSmUbXa+\n1Mu2OOtrn3aqXDqLTXbOmzrUqSNvKIf6cmipCSyXMw6ufxrGXxM1VTV9Xdh7PofDcXs+v34PHPik\nZ//o4ElwxQNHPbxu3Truvvtuli9fDsCECRNYsmQJaWlppKamUlFRwcyZM9mxYwci8qmqkqzn88BS\nXtfC4+/uZsmmA+yrdL5cL8h3cX1eFeckFpPVvA8aD0HTocCleo99YnesU6eekO7UuR9eTwdvC1QX\nQk2R82rvMmBjzjg4/UaYfIPzxX48qs5dQM1+53yHz13oNCDHJvnbCvyv5I7lYBg6xamyMWHXZ3o+\nR4upU6dSVlZGSUkJ5eXlZGRkMHjwYL7zne/wzjvv4HK5KC4u5uDBgwwePDjS4Zo+ovBQI7c98RZ5\nNev5dnYZM4YXMrRpB+6KIqjwF0oe5DyWmZgJOadCYpaznpDpb1BNPfK0THzakfWYuNCqZFSdxtsa\n/5d5Wj4MmXJi1Tkizpd9cg7kTTupa2H6joGZGI7xyz6crr/+ev7xj39w4MAB5syZw4IFCygvL2fN\nmjV4PB5GjhwZdLhtE2W8bVC0isqP/5eatYtZpDtxexRqBLLGwoiZMGSy0wg7eHLPNPAei4jzxE9S\nNgydGt6/ZfqFgZkYImTOnDnceuutVFRUsHz5cl544QVyc3PxeDy8/fbb7Nu3L9Ihmkjx+WDtU7Bj\nKex5F1rrSEcollOomnY32ZM/4ySBuORIR2qMJYaeNHHiROrq6sjLy2PIkCHcdNNNXH311UyaNInp\n06czbly3aSZMtNjwLLz2HUgfwYERV/OrbUPYkTSVP339ErKzEiMdnTEBLDH0sE8+OdLonZ2dzQcf\nfBC0nPVhiDI7lkLKEN64dAl3LlzPqKwknrllBoNS4yMdmTHd2LNhxoSbzwu7l7E3/Sxuf3YdE4ak\n8vw3ZlpSMH2W3TEYE24l66G5mv/alc/Zo7P4083TSIqzf3qm7xpQ/3eqav8ZF+Yk9cd+J1Fv11v4\nENZ7prD0y9OJ99gz+6ZvGzBVSfHx8VRWVg7oL05VpbKykvh4q4LoT3TnW2xlFNPGj7WkYPqFAXPH\nkJ+fT1FREeXl5ZEOJazi4+PJz8+PdBgmVM21ULSKt9uvYvZp1rHR9A8DJjF4PB5GjRoV6TCMCbT3\nXUS9fCin87VTciMdjTEhGTCJwZi+SHe+RRPxpBScR0KsVSOZ/mHAtDEY0xe1bHuT973j+czkYZEO\nxZiQhT0xiMhsEdkmIjtF5J4gx78nIuv9r40i4hWRMA8OY0wvOLSb+Lp9fMDpXDzOqpFM/xHWxCAi\nbuAR4ApgAnCjiEzoXEZVf6uqU1R1CvADYLmqHgpnXMb0Bt31NgCNwy4gJd4T4WiMCV247xhmADtV\ndbeqtgILgWPNVHMj8FyYYzKmV9RueoMizWbqlDMjHYoxJyTciSEPKOy0XeTf142IJAKzgRePcnye\niKwWkdUD/ZFUMwB424gvfJcVvslcOtEeUzX9S19qfL4aeO9o1UiqOl9Vp6vq9JycnF4OzZgTVLyG\nOG8DB3LOITMpNtLRGHNCwp0YioHOj2Pk+/cFMxerRjIDROWG1/GqMGTK5ZEOxZgTFu7EsAooEJFR\nIhKL8+W/qGshEUkDLgReDXM8xvSK1u1vsUHHcNGUUyIdijEnLKyJQVXbgTuBJcAW4AVV3SQit4nI\nbZ2Kfg54Q1UbwhmPMb2iqYrcuk3sTJlBrg2tbfqhsPd8VtXFwOIu+x7rsv0U8FS4YzGmN5R/vJQc\nfCSMuyzSoRhzUmxIDGN6WMWGxcRpAlNmXhLpUIw5KX3pqSRj+j9Vsg68x8a4KQzLSYt0NMacFEsM\nxvSg8n2byfWV0TpiVqRDMeakWWIwpgftXuk8WDdyxtURjsSYk2eJwZiuvG2w6RUo337Cb43Zs4xi\nGczIgolhCMyY3mGNz8Z0VrETXroVStYCAuOvhvO/C0OnBi3e5vVRVNXEnop69h6sZk7zenYMuTr4\nuC/G9BOWGIwBUIU1T8GSH4I7Fq57DA7tgg/nw5ZFNA27gO2nzGOD+zT2VDayt6KBvZWNHDpUwTl8\nzCzXBq50byBJWhg07bOR/jTGfCqWGEz/t+cdKN0A8emQkA7xaZ3W0yEuBUQC3tLY2s7u8gYONbTS\nXnuQcat+xNCDyyjMOIvXRt3LgX2ZFFaNpcxzBhc0LuKr+xdzeuGX8PrGsoEruTCxmh+xntGxm3Dh\npT02Fe+oi9CJVzNk0nURuhDG9AxR1UjHcMKmT5+uq1evjnQYpi/Y+RYs+CKo76hF2uKzqUidyE5P\nAavbRvFWbR4bq52B7S5yreP/ev5EKk080D6Xp7yX43K5SYp1k5eRyMisREZmJzEm3cW0Q4sZvvUJ\n3LX+AYMHT4aCy2DsZZB/Jrjtd5bp20RkjapOP245SwymP2rz+ijavp78F6/hUOwg/nvob2hsbMLX\nVAVN1bhbavC01pBGPQWuYibLLsZKCS5x/n+vjRtMW+pwsso/ojlzPFWzHyV26ESS4mKIi3EhXe4w\nDvO2wf6VkF0AKTactulfQk0M9hPH9K4Nz8MnL0DmGMgdBznjIedUSOw+m6uqUtPUxoHaZg7UNLO7\nvIEtpbVsLq2lvKyUF1z3Ui3CnKa78OIiIzGDtORc0nNjSUnwkJ7oIS3BQ3JGIjGDkvEleXGVfQLF\na0ktWQtlW+Dcu4i/6EcMiYkLLX63B0ad38MXxZi+xRKD6T1bXoOXvwGpec6v7tb6w4daE3I4GDeK\ndTGnszDmaorrfByoaaalPbCKKDs5ltMGJ/BoxqPkN1RReM0LLJ10IR53iE9ejzzPeRljjsoSgzm6\nfe/DugWQcwoMOwuGTAHPSY4WWrgKXrwF8qZRM+cl1hY3s2X7Fg7t2UBM5TbG1BVyakMh17ge5wz3\n//KPod+jceIMBqXGMzg1nsFpcQzLTCQ3OQ7+59tQtA4+/zgjJ1/Us5/ZGGOJwQTRUg9v3Q8fzQdP\nErT5R0N3xzrJYfhZTqIYfjYkZR/zVDWNbezatoHxi79IvWRyW81drP31ClQhxiVMyp/OjHM+Q+bI\nTEaMyITi5eS/9h3uLvw25H4Vpt/vPGXU4YNHYO0zcP5/wOQbwngRjIle1vhsAu1eBou+BdWFcNY3\n4JKfQGsDFH4EhSudZck68LaCywPn3AkXfA9ik/D6lM0ltazcXcmafVVsLKmhseogL8XeR4o0clvs\nr0nLH8ekvHTOHJXB1GEZJMS6u8fQUg9v/wo+/CMk5cKVv4UJ18D2JfDcXBj3Wbj+aXBZx31jToQ9\nlWROTHMtLP2x08krcwxc+wiMODt42fYWKFmPb/WTuD5eSF3cYJ5KvZ35ZeOoa/ECMCIrkalD4vjB\nwe+R3biD+jkvk3bKuScWU/EaWHQXHPwECi53qrayRsNXX4fYpE/3eY2JQvZUkgndjjedevu6Ujjn\nW3DRj8CTcNTiu6raeHJNIos2fJ5xrafwc99f+FbLfVyWejZFM3/K5ElTyE32wPM3Q90mmPPXE08K\nAHnTYN7b8MEfYNkDTme1uc9ZUjAmzCwxRLsVD8KbP4WccXDDM5Af/MeEqrJy9yH+vGI3b24pIzbG\nxdWThzLr1ElkjpgHm59m3LJfM+5f10Dbd6GhHLb9E674v854QyfL7YHzvgOT54C4rO+AMb3AEkO0\nUoVlv4blv4HTvgDX/RGCPMvf5vWx+JNSHn93NxuLa8lMiuWuSwq4+ewRZCd3Kn/OnXDa52HJj5zz\nApx9p9NO0RNSh/bMeYwxx2WJIRqpwtKfwPsPw5QvwTUPg+tII3Btcxsrd1Xy3s4K3th8kNKaZkbn\nJPGrz03i82fkEe8J0mAMzpf39X+BaV+GA5/AzDt66QMZY3qSJYZo4/PB6/8Jqx6HM78OV/yWNoV1\new6xYmcFK3aUs6GoBq9PSfC4OXtMFr/83GnMOiUXl+sow0R0NXqW8zLG9EthTwwiMht4CHADT6jq\nA0HKzAJ+D3iAClW9MNxxRSWfF/7nLlj3Vzj7TrZN/j5/XbSJV9aVUN/SjktgUn46t184hvMKspk6\nPJ24mKPcHRhjBqywJgYRcQOPAJcBRcAqEVmkqps7lUkHHgVmq+p+EckNZ0xRy9sOr9wGn/yd7eNu\n5949V/HR2+8SG+Pis5OH8JkJgzh7dDZpiZ5IR2qMibBw3zHMAHaq6m4AEVkIXAts7lTm34CXVHU/\ngKqWhTmm6NJcCyVraV7xKPG7l/CI6yZ+u/58hmU284MrxnHD9GFkJMVGOkpjTB8SUmIQkUmq+slJ\nnD8PKOy0XQSc1aXMKYBHRJYBKcBDqvrMSfwt422Hss1QvBqK1kDxarR8G4ISoy7u997MnjH/zpNn\nj+DCU3Jxh9pmYIyJKqHeMTwqInHAU8ACVa3p4RimAZcACcAHIrJSVQNmYheRecA8gOHDh/fgn+9H\ntr0Ob97vdERT35GXz+tftgNOT/a2uAw2uwp4q+0LbHYVUDD1Qr5y4WRGZFnnMGPMsYWUGFT1fBEp\nAL4GrBGRj4C/qOrS47y1GBjWaTvfv6+zIqBSVRuABhF5BzgdCEgMqjofmA/OkBihxD1gVO2F1++B\n7a87HdFOn+t09hKXM2WluEFcqLjY2DqEP+5MZ3FxPBmJsXzlolH89uwRVl1kjAlZyG0MqrpDRO4F\nVgMPA1PFmebqh6r60lHetgooEJFROAlhLk6bQmevAn8QkRggFqeq6cET+xgDVHuL09fgnf/nfPlf\n9jOY+U2nN3AXK3dXct+rm9h2sI78jATuv2Y0N0wfFnyQOmOMOYZQ2xgmA18FrgKWAler6loRGQp8\nAARNDKraLiJ3AktwHld9UlU3icht/uOPqeoWEflf4GPAh/NI68ZP+8H6vV3/gsXfg8qdMOFauPxX\nkJbfrVhVQyu/WryFv68pYlhmAg/NncJVk4YQE+rENcYY00VIo6uKyHLgCeAfqtrU5djNqvrXMMUX\n1IAeXbW5Fl77Dmz8B2SOdoacHntpt2Kqyktri/nl4i3UNrUx74LRfOviArtDMMYcVU+PrnoV0KSq\nXv/JXUC8qjb2dlIY0Mq3w/M3QeUumPUDOPfuoDOm7S6v595XNvL+rkqmjcjgV5+bxKmDUyIQsDFm\nIAo1MbwJXAp0TNKbCLwBnBOOoKLSlv+Bl293BrL791dg1AXdirS0e3ls2W4eeXsncR4Xv/zcadx4\n5vDQh6owxpgQhJoY4lX18MztqlovIolhiim6+Lzw9i/h3f+CoWfAnL8GbUt4d0c5P3l1E3sqGrhq\n8hDu++wEclNPcv5lY4w5hlATQ4OInKGqawFEZBrQdJz3mONpPAQvfh12vQVn/Dtc8dtuVUcHapr5\n+T8388+PSxmZlcgzX5vBBafkRChgY0w0CDUx3A38XURKAAEGA3PCFlU0KN3gn+GsFK5+CKZ9JeBw\nu9fHU+/v5cGl22nzKd+97BTmXTD66ENeG2NMDwm1g9sqERkHnOrftU1V28IX1gDWUOFMZLP6L5A8\nyJm/uMusaWv3V/HDlz5h64E6Zp2aw/3XTLQey8aYXnMig+idCkwA4oEzRAQb0+gEtDXDR39yOqu1\nNsCZtzhPHiVmBhRbtq2MW59ZTXZyHI99aRqXTxyE04/QGGN6R6gd3O4DZuEkhsXAFcAKwBLD8ajC\n5ldg6X1QvQ9OmQ2X/RxyTulW9INdlXzjr2soyE3huVtn2hDYxpiICPWO4Ys44xetU9Wvisgg4G/h\nC2uAKP0YFv8HFH4Ig06Dm1+BMRcFLbpmXxW3PL2K4ZmJ/PWWGZYUjDERE2piaFJVn4i0i0gqUEbg\n4Himq7oD8My14IqBa/4bptwUMK9yZxuLa/jKXz4iNyWOBV8/i6zkuF4O1hhjjgg1Maz2z7T2OLAG\np6PbB2GLqr9ThVe+CW1N8I13glYbddh+sI6b//whqfEeFtw60/omGGMi7riJwT+C6q9VtRp4zD/g\nXaqqfhz26Pqrj+Y7fROu+q9jJoU9FQ3c9MSHeNwuFnz9LPLSE3oxSGOMCe64iUFVVUQWA5P823vD\nHVS/VrYFlv4ECj4D0285arGiqkZuenwlXp/y/LyZjMy2x1GNMX1DqGMzrxWRM8MayUDQ3gIv3Qqx\nyXDtI84kOkGUVDfxb49/SH1LO898bQYFg2wAPGNM3xFqG8NZwE0isg9owOn9rKo6OWyR9Uf/+gUc\n+ARuXAjJuUGLlFQ3MXf+SqoaWnnmlhmclpfWy0EaY8yxhZoYLg9rFAPBnnfg/f+GaV+FU68IWqRr\nUpg6PKOXgzTGmOMLNTFE1xzLJ6qpCl6+DbLGwOW/DFqkpLqJGx+3pGCM6ftCTQz/xEkOgjMkxihg\nGzAxTHH1H6rw2neh/iDcshRiuzcil9Y4SeFQvSUFY0zfF+ogepM6b4vIGcA3wxJRf7P+Wdj0Elx8\nL+Sd0e1waY1TfXSovpWnLSkYY/qBk5ox3j8vw1k9HEv/s2EhLPoWjDwfzvtut8Ndk8IZlhSMMf1A\nqIPodf7WcwFnACVhiai/+OhxZxykURfC3Ge7DXfR2NrOl5/8yJKCMabfCbWNofOD9u04bQ4v9nw4\n/cS7v4O37odTr4IvPtlt1jWAn7y6iR1l9TzzNUsKxpj+JdQ2hvtP9g+IyGzgIcANPKGqD3Q5Pgt4\nFdjj3/WSqv7sZP9eWKk6CWHFgzDperjuj+DuPgrq31cX8o81RXz74rGcX2DTcBpj+peQ2hhEZKl/\nEL2O7QwRWRLC+9zAIzjzN0wAbhSRCUGKvquqU/yvvpkUfD6n6mjFg05fhc/ND5oUth+s48evbmTm\n6EzuuvTo4yQZY0xfFWrjc45/ED0AVLUKCN61N9AMYKeq7lbVVmAhcO2Jhxlh3nZ45XZY9QSc8234\n7IPg6n7pGlra+eaCtSTHeXh47lTcLpt5zRjT/4SaGLwiMrxjQ0RGEFqntzygsNN2kX9fV+eIyMci\n8rqIBO0bISLzRGS1iKwuLy8PMewesvwB+Hih80jqZT8LOgaSqvLjVzayq7yeh+ZOseGzjTH9VqiN\nzz8CVojIcpxObucD83oohrXAcFWtF5ErgVeAgq6FVHU+MB9g+vTpvdsTe+NLMOZiuOB7Ry3y99VF\nvLSumLsuKeDcsdm9GJwxxvSskO4YVPV/cR5RfR6nOmiaqh63jQEoJnCmt3z/vs7nrlXVev/6YsAj\nIn3nm7VyFxza5czVfBRbD9Ty41c3cu7YLL59SbecZowx/Uqojc+fA9pU9TVVfQ1oF5HrQnjrKqBA\nREaJSCwwF1jU5dyD/ZMBISIz/DFVnsiHCKudbzrLsZcGPdzQ0s4dC9aSmuDh93OsXcEY0/+F2sZw\nn6rWdGzl4o30AAARtElEQVT4G6LvO96bVLUduBNYAmwBXlDVTSJym4jc5i/2RWCjiGwAHgbmqmrf\nGbRvxxuQNdYZIC+IXy3ewp6KBh6aO4WcFJur2RjT/4XaxhAsgYTaB2IxsLjLvsc6rf8B+EOIcfSu\n1kbY8y5M/1rQw8XVTTy/qpCbzhrBOWP6Tu2XMcZ8GqHeMawWkd+JyBj/63fAmnAG1ifsXQHeFii4\nLOjhx9/ZDcA3Lhzdm1EZY0xYhZoYvgW04jQ+Pw+0AHeEK6g+Y8cb4EmEEed2O1RR38LCVfu5bmoe\n+RmJEQjOGGPCI9TqoAbgnjDH0reowo4lziB5QcZC+st7e2hp93H7rOBtD8YY01+FOrpqDvCfOBPz\nHP6WVNWLwxRX5FXsgOr9cO7d3Q7VNrfxzPv7uPK0IYzJSY5AcMYYEz6hViUtALbizNx2P7AX51HU\ngWvHG84ySPvCXz/YR11Lu90tGGMGpFATQ5aq/hmnL8NyVf0aMHDvFgB2LoWccZA+PGB3U6uXP6/Y\nw6xTczgtLy1CwRljTPiEmhja/MtSEblKRKYCmWGKKfJa6mHve0HvFhau2s+hhlbuuGhsBAIzxpjw\nC7Ufwy9EJA34P8B/A6nAd8IWVaTtWQ6+Nij4TMDu1nYf89/ZzYyRmZw5cuDmRWNMdAv1qaTX/Ks1\nwEVdj4vID1T11z0ZWETteANiU2DYzIDdr6wrprSmmV9/flKEAjPGmPALtSrpeK7vofNEnirsWApj\nZkFM7OHdXp/yx+W7mDg0lQtPsVnZjDEDV08lhoEzclzZFqgthrGB7QuvbyxlT0UDd1w0FgkyH4Mx\nxgwUPZUY+s6gd59WkMdUVZVH3t7F6JwkLp84OEKBGWNM77A7hq52LIVBkyB16OFdy7aVs6W0ltsv\nHGPDahtjBryeSgx/76HzRFZzDez/oNtjqgs+3M+g1DiumxpsVlJjjBlYjpkYus6kJiJfEpGH/fMv\nH/7prKq/CleAvWr3MlBvwGOqTa1eVuws5/KJg/G4eyqPGmNM33W8b7o3OlZE5F7gZpzhti8DfhfG\nuCJjxxsQnwb5Zx7etWJnBc1tPi6bMCiCgRljTO85Xj+GzhXqnwfOV9UGEXkWWBu+sCLg8GOqF4P7\nyGVZuvkAKXExnDUqK4LBGWNM7zleYkjwD3/hAjz+4bdR1TYR8YY9ut504GOoPxhQjeT1KW9tKWPW\nuFxiY6wayRgTHY6XGEo5UmVUISJDVLVURLKA9vCG1st2LHWWYy89vGvd/ioqG1qtGskYE1WOmRhU\ntdvwF35VwAU9H04E7V0BuRMhOffwrqWbDxLjEmadaj2djTHRI9RB9BCRzwPn4XRmW6GqL4ctqt7m\nbYPCj2DqTQG7l245yMzRWaTGeyIUmDHG9L6QKs5F5FHgNuATYCPwDRF5JMT3zhaRbSKyU0SOOj2o\niJwpIu0i8sVQztujStZDW0PA3M67yuvZXd5g1UjGmKgT6h3DxcB4VVUAEXka2HS8N4mIG3gE5/HW\nImCViCxS1c1Byv2GTo/H9qp9K5zliHMO71q6+SAAl1piMMZEmVAftdkJdJ7KbJh/3/HMAHaq6m5V\nbQUWAtcGKfct4EWgLMR4etbe9yD7lG7tCxOHppKXnhCRkIwxJlJCTQwpwBYRWSYiy4DNQKqILBKR\nRcd4Xx5Q2Gm7yL/vMBHJAz4H/DHkqHuSzwv7VwZUI5XXtbB2f5VVIxljolKoVUk/CWMMvwe+r6q+\nYw1nLSLzgHkAw4cPP2q5E3bgY2itg5HnHd71r60HUYVLx1tiMMZEn1BncFsuIoOAjrEiPlLVUKp9\ninGqnTrk+/d1Nh1Y6E8K2cCVItKuqq90iWE+MB9g+vTpPTfM9973nGWnO4alm8vIS09g4tDUHvsz\nxhjTX4T6VNINwEc4M7XdAHwY4tNDq4ACERklIrHAXCCg6klVR6nqSFUdCfwD+GbXpBBW+96DzNGQ\nOgQ4MmjepeNzbUIeY0xUCrUq6UfAmR13CSKSA7yJ80V+VKraLiJ3AksAN/Ckqm4Skdv8xx876ch7\ngs8H+96H8Vcf3vXujnL/oHk2IY8xJjqFmhhcXaqOKgnxbkNVFwOLu+wLmhBU9SshxtMzyjZBc3WX\naqSDpMTHcNbozF4NxRhj+opQE8PrIrIEeM6/PYcuX/b9Ukf7wkgnMXh9yr+2ljHr1Fybe8EYE7VC\n/fZT4E/AZP9rftgi6k373oO04ZDuPOW01gbNM8aYkO8YLlPV7wMvdewQkfuB74clqt6g6rQvdJrG\n883NB/G4bdA8Y0x0O2ZiEJHbgW8Co0Xk406HUoD3whlY2JVvg8aKbu0LNmieMSbaHe+O4VngdeDX\nQOcB8OpU9VDYouoNHeMj+dsXdpbVs7uiga+cOzJyMRljTB9wvPkYaoAa4MbeCacX7X0PUoZCxigA\n3t7qPHRlvZ2NMdEuOh+9UXUankecA/5ObLsr6slKimWoDZpnjIly0ZkYKnc58zuPPNK+UFLdbEnB\nGGOI1sSwr2N8pCMD55VUNzEkLT5CARljTN8RvYkhKReyCwBQVUqqm+yOwRhjiMbEoOo0PHdqX6ht\nbqeh1cvQdLtjMMaY6EsM1fugtihg/oXSmiYAhqTZHYMxxkRfYggy/0JpdTOAVSUZYwzRmBj2vQcJ\nGZAz7vCu4mrnjsGqkowxJhoTw94Vzt2C68hHL61pwu0SclMsMRhjTHQlhpoip42hUzUSOH0YBqfG\n43bZjG3GGBNdiWHf+85yZNfE0GTVSMYY4xddiSExCyZcB4NOC9hdUtNkTyQZY4xfqPMxDAxjL3Fe\nnfh8yoGaZoZOssRgjDEQbXcMQVTUt9DmVatKMsYYv6hPDCU1Th8Gq0oyxhhH2BODiMwWkW0islNE\n7gly/FoR+VhE1ovIahE5L9h5wqXE+jAYY0yAsLYxiIgbeAS4DCgCVonIIlXd3KnYW8AiVVURmQy8\nAIzrfrbwOJwY7I7BGGOA8N8xzAB2qupuVW0FFgLXdi6gqvWqqv7NJEDpRaU1zSR43KQn2jzPxhgD\n4U8MeUBhp+0i/74AIvI5EdkK/BP4WphjClBS3cSQ9HhErHObMcZAH2l8VtWXVXUccB3w82BlRGSe\nvw1idXl5eY/97ZKaZvJs8DxjjDks3ImhGBjWaTvfvy8oVX0HGC0i2UGOzVfV6ao6PScnp8cCtJnb\njDEmULgTwyqgQERGiUgsMBdY1LmAiIwVfz2OiJwBxAGVYY4LgJZ2L+V1LTbctjHGdBLWp5JUtV1E\n7gSWAG7gSVXdJCK3+Y8/BnwB+HcRaQOagDmdGqPD6mBNC2BPJBljTGdhHxJDVRcDi7vse6zT+m+A\n34Q7jmBKOmZusz4MxhhzWJ9ofI6UI53b7I7BGGM6RHViKPUPh2FVScYYc0RUJ4aS6iYyEj0kxLoj\nHYoxxvQZUZ8YbPA8Y4wJFNWJobSm2doXjDGmi6hODMU2pacxxnQTtYmhrrmNuuZ2u2MwxpguojYx\nlB6eoMfuGIwxprOoTQzWh8EYY4KL4sTg78NgicEYYwJEbWIorWnCJTAoJS7SoRhjTJ8StYmhpLqZ\nQanxxLij9hIYY0xQUfutaPMwGGNMcFGbGEprmqx9wRhjgojKxKCqlFivZ2OMCSoqE0NlQyut7T6G\nWlWSMcZ0E5WJoaMPwxC7YzDGmG6iNDHYPAzGGHM0UZoYOno9W1WSMcZ0FZWJobSmibgYF5lJsZEO\nxRhj+pyoTAwdTySJSKRDMcaYPic6E4N1bjPGmKMKe2IQkdkisk1EdorIPUGO3yQiH4vIJyLyvoic\nHu6YSqutD4MxxhxNWBODiLiBR4ArgAnAjSIyoUuxPcCFqjoJ+DkwP5wxtXl9HKxrtj4MxhhzFOG+\nY5gB7FTV3araCiwEru1cQFXfV9Uq/+ZKID+cAR2sbUbVhts2xpijCXdiyAMKO20X+fcdzS3A68EO\niMg8EVktIqvLy8tPOqCOPgzWuc0YY4LrM43PInIRTmL4frDjqjpfVaer6vScnJyT/julNU4fhjzr\nw2CMMUHFhPn8xcCwTtv5/n0BRGQy8ARwhapWhjWgjuEwrNezMcYEFe47hlVAgYiMEpFYYC6wqHMB\nERkOvATcrKrbwxwPpdXNpMbHkBQX7pxojDH9U1i/HVW1XUTuBJYAbuBJVd0kIrf5jz8G/ATIAh71\ndzhrV9Xp4YrJ5mEwxphjC/vPZlVdDCzusu+xTutfB74e7jg6FFsfBmOMOaY+0/jcW5w7Bmt4NsaY\no4mqxNDY2k51Y5s1PBtjzDFEVWLo6MOQZ1VJxhhzVFGWGDoeVbWqJGOMOZqoSgwdndus8dkYY44u\nqhJDbko8l00YxKBUu2MwxpijiapeXheNy+WicbmRDsMYY/q0qLpjMMYYc3yWGIwxxgSwxGCMMSaA\nJQZjjDEBLDEYY4wJYInBGGNMAEsMxhhjAlhiMMYYE0BUNdIxnDARKQf2neTbs4GKHgxnILBrEpxd\nl+7smnTXn67JCFXNOV6hfpkYPg0RWR3OGeL6I7smwdl16c6uSXcD8ZpYVZIxxpgAlhiMMcYEiMbE\nMD/SAfRBdk2Cs+vSnV2T7gbcNYm6NgZjjDHHFo13DMYYY44hqhKDiMwWkW0islNE7ol0PJEgIk+K\nSJmIbOy0L1NElorIDv8yI5Ix9jYRGSYib4vIZhHZJCJ3+fdH7XURkXgR+UhENvivyf3+/VF7TTqI\niFtE1onIa/7tAXdNoiYxiIgbeAS4ApgA3CgiEyIbVUQ8Bczusu8e4C1VLQDe8m9Hk3bg/6jqBGAm\ncIf//41ovi4twMWqejowBZgtIjOJ7mvS4S5gS6ftAXdNoiYxADOAnaq6W1VbgYXAtRGOqdep6jvA\noS67rwWe9q8/DVzXq0FFmKqWqupa/3odzj/6PKL4uqij3r/p8b+UKL4mACKSD1wFPNFp94C7JtGU\nGPKAwk7bRf59Bgapaql//QAwKJLBRJKIjASmAh8S5dfFX2WyHigDlqpq1F8T4PfAfwK+TvsG3DWJ\npsRgQqDOY2pR+aiaiCQDLwJ3q2pt52PReF1U1auqU4B8YIaInNbleFRdExH5LFCmqmuOVmagXJNo\nSgzFwLBO2/n+fQYOisgQAP+yLMLx9DoR8eAkhQWq+pJ/d9RfFwBVrQbexmmbiuZrci5wjYjsxamK\nvlhE/sYAvCbRlBhWAQUiMkpEYoG5wKIIx9RXLAK+7F//MvBqBGPpdSIiwJ+BLar6u06Hova6iEiO\niKT71xOAy4CtRPE1UdUfqGq+qo7E+f74l6p+iQF4TaKqg5uIXIlTR+gGnlTVX0Y4pF4nIs8Bs3BG\nhDwI3Ae8ArwADMcZtfYGVe3aQD1gich5wLvAJxypO/4hTjtDVF4XEZmM05DqxvkB+YKq/kxEsojS\na9KZiMwC/kNVPzsQr0lUJQZjjDHHF01VScYYY0JgicEYY0wASwzGGGMCWGIwxhgTwBKDMcaYAJYY\njOllIjKrY2ROY/oiSwzGGGMCWGIw5ihE5Ev+OQnWi8if/IPK1YvIg/45Ct4SkRx/2SkislJEPhaR\nlzvG5BeRsSLypn9eg7UiMsZ/+mQR+YeIbBWRBf7e18b0CZYYjAlCRMYDc4Bz/QPJeYGbgCRgtapO\nBJbj9BwHeAb4vqpOxulB3bF/AfCIf16Dc4COUTinAnfjzA0yGmccHmP6hJhIB2BMH3UJMA1Y5f8x\nn4AzOJoPeN5f5m/ASyKSBqSr6nL//qeBv4tICpCnqi8DqGozgP98H6lqkX97PTASWBH+j2XM8Vli\nMCY4AZ5W1R8E7BT5cZdyJzumTEundS/2b9H0IVaVZExwbwFfFJFcODyv7wicfzNf9Jf5N2CFqtYA\nVSJyvn//zcBy/2xwRSJynf8ccSKS2KufwpiTYL9SjAlCVTeLyL3AGyLiAtqAO4AGnElr7sWpWprj\nf8uXgcf8X/y7ga/6998M/ElEfuY/x/W9+DGMOSk2uqoxJ0BE6lU1OdJxGBNOVpVkjDEmgN0xGGOM\nCWB3DMYYYwJYYjDGGBPAEoMxxpgAlhiMMcYEsMRgjDEmgCUGY4wxAf4/v0VVPvCZ828AAAAASUVO\nRK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f932ee82cf8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(epochs, [x[5] for x in all_losses], label='train');\n",
    "plt.plot(epochs, [x[6] for x in all_losses], label='val');\n",
    "plt.legend();\n",
    "plt.xlabel('epoch');\n",
    "plt.ylabel('top5_accuracy');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Save"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "model.cpu();\n",
    "torch.save(model.state_dict(), 'model.pytorch_state')"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
